home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / v cisle / autoit / autoit-v3.2.0.1-setup.exe / Include / String.au3 < prev    next >
Text File  |  2006-06-20  |  14KB  |  359 lines

  1. ; Include Version:1.49  (1/17/2006)
  2. #include-once
  3.  
  4. ;===============================================================================
  5. ;
  6. ; Function Name:    _HexToStr("hex")
  7. ; Description:      Convert a hex string of characters to ASCII Characters.
  8. ; Parameter(s):     $strHex is the hex string you want to convert.
  9. ; Requirement(s):   Hex Input.
  10. ; Return Value(s):  On Success - Returns the converted string of characters.
  11. ;                   On Failure - -1  and sets @ERROR = 1
  12. ; Author(s):        Jarvis Stubblefield
  13. ; Corrected:        2005/09/04 jpm error checking
  14. ;
  15. ;===============================================================================
  16.  
  17. Func _HexToString($strHex)
  18.     Local $strChar, $aryHex, $i, $iDec, $Char, $iOne, $iTwo
  19.     
  20.     $aryHex = StringSplit($strHex, "")
  21.     If Mod($aryHex[0], 2) <> 0 Then
  22.         SetError(1)
  23.         Return -1
  24.     EndIf
  25.     
  26.     For $i = 1 To $aryHex[0]
  27.         $iOne = $aryHex[$i]
  28.         $i = $i + 1
  29.         $iTwo = $aryHex[$i]
  30.         $iDec = Dec($iOne & $iTwo)
  31.         If @error <> 0 Then
  32.             SetError(1)
  33.             Return -1
  34.         EndIf
  35.         
  36.         $Char = Chr($iDec)
  37.         $strChar = $strChar & $Char
  38.     Next
  39.     
  40.     Return $strChar
  41. EndFunc   ;==>_HexToString
  42.  
  43. ;===============================================================================
  44. ;
  45. ; Function Name:    _StringEncrypt()
  46. ; Description:      RC4 Based string encryption
  47. ; Parameter(s):     $i_Encrypt - 1 to encrypt, 0 to decrypt
  48. ;                   $s_EncryptText - string to encrypt
  49. ;                   $s_EncryptPassword - string to use as an encryption password
  50. ;                   $i_EncryptLevel - integer to use as number of times to encrypt string
  51. ; Requirement(s):   None
  52. ; Return Value(s):  On Success - Returns the string encrypted (blank) times with (blank) password
  53. ;                   On Failure - Returns a blank string and sets @error = 1
  54. ; Author(s):        Wes Wolfe-Wolvereness <Weswolf at aol dot com>
  55. ;
  56. ;===============================================================================
  57. ;
  58. Func _StringEncrypt($i_Encrypt, $s_EncryptText, $s_EncryptPassword, $i_EncryptLevel = 1)
  59.     If $i_Encrypt <> 0 And $i_Encrypt <> 1 Then
  60.         SetError(1)
  61.         Return ''
  62.     ElseIf $s_EncryptText = '' Or $s_EncryptPassword = '' Then
  63.         SetError(1)
  64.         Return ''
  65.     Else
  66.         If Number($i_EncryptLevel) <= 0 Or Int($i_EncryptLevel) <> $i_EncryptLevel Then $i_EncryptLevel = 1
  67.         Local $v_EncryptModified
  68.         Local $i_EncryptCountH
  69.         Local $i_EncryptCountG
  70.         Local $v_EncryptSwap
  71.         Local $av_EncryptBox[256][2]
  72.         Local $i_EncryptCountA
  73.         Local $i_EncryptCountB
  74.         Local $i_EncryptCountC
  75.         Local $i_EncryptCountD
  76.         Local $i_EncryptCountE
  77.         Local $v_EncryptCipher
  78.         Local $v_EncryptCipherBy
  79.         If $i_Encrypt = 1 Then
  80.             For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
  81.                 $i_EncryptCountG = ''
  82.                 $i_EncryptCountH = ''
  83.                 $v_EncryptModified = ''
  84.                 For $i_EncryptCountG = 1 To StringLen($s_EncryptText)
  85.                     If $i_EncryptCountH = StringLen($s_EncryptPassword) Then
  86.                         $i_EncryptCountH = 1
  87.                     Else
  88.                         $i_EncryptCountH = $i_EncryptCountH + 1
  89.                     EndIf
  90.                     $v_EncryptModified = $v_EncryptModified & Chr(BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountG, 1)), Asc(StringMid($s_EncryptPassword, $i_EncryptCountH, 1)), 255))
  91.                 Next
  92.                 $s_EncryptText = $v_EncryptModified
  93.                 $i_EncryptCountA = ''
  94.                 $i_EncryptCountB = 0
  95.                 $i_EncryptCountC = ''
  96.                 $i_EncryptCountD = ''
  97.                 $i_EncryptCountE = ''
  98.                 $v_EncryptCipherBy = ''
  99.                 $v_EncryptCipher = ''
  100.                 $v_EncryptSwap = ''
  101.                 $av_EncryptBox = ''
  102.                 Local $av_EncryptBox[256][2]
  103.                 For $i_EncryptCountA = 0 To 255
  104.                     $av_EncryptBox[$i_EncryptCountA][1] = Asc(StringMid($s_EncryptPassword, Mod($i_EncryptCountA, StringLen($s_EncryptPassword)) + 1, 1))
  105.                     $av_EncryptBox[$i_EncryptCountA][0] = $i_EncryptCountA
  106.                 Next
  107.                 For $i_EncryptCountA = 0 To 255
  108.                     $i_EncryptCountB = Mod(($i_EncryptCountB + $av_EncryptBox[$i_EncryptCountA][0] + $av_EncryptBox[$i_EncryptCountA][1]), 256)
  109.                     $v_EncryptSwap = $av_EncryptBox[$i_EncryptCountA][0]
  110.                     $av_EncryptBox[$i_EncryptCountA][0] = $av_EncryptBox[$i_EncryptCountB][0]
  111.                     $av_EncryptBox[$i_EncryptCountB][0] = $v_EncryptSwap
  112.                 Next
  113.                 For $i_EncryptCountA = 1 To StringLen($s_EncryptText)
  114.                     $i_EncryptCountC = Mod(($i_EncryptCountC + 1), 256)
  115.                     $i_EncryptCountD = Mod(($i_EncryptCountD + $av_EncryptBox[$i_EncryptCountC][0]), 256)
  116.                     $i_EncryptCountE = $av_EncryptBox[Mod(($av_EncryptBox[$i_EncryptCountC][0] + $av_EncryptBox[$i_EncryptCountD][0]), 256) ][0]
  117.                     $v_EncryptCipherBy = BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountA, 1)), $i_EncryptCountE)
  118.                     $v_EncryptCipher = $v_EncryptCipher & Hex($v_EncryptCipherBy, 2)
  119.                 Next
  120.                 $s_EncryptText = $v_EncryptCipher
  121.             Next
  122.         Else
  123.             For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
  124.                 $i_EncryptCountB = 0
  125.                 $i_EncryptCountC = ''
  126.                 $i_EncryptCountD = ''
  127.                 $i_EncryptCountE = ''
  128.                 $v_EncryptCipherBy = ''
  129.                 $v_EncryptCipher = ''
  130.                 $v_EncryptSwap = ''
  131.                 $av_EncryptBox = ''
  132.                 Local $av_EncryptBox[256][2]
  133.                 For $i_EncryptCountA = 0 To 255
  134.                     $av_EncryptBox[$i_EncryptCountA][1] = Asc(StringMid($s_EncryptPassword, Mod($i_EncryptCountA, StringLen($s_EncryptPassword)) + 1, 1))
  135.                     $av_EncryptBox[$i_EncryptCountA][0] = $i_EncryptCountA
  136.                 Next
  137.                 For $i_EncryptCountA = 0 To 255
  138.                     $i_EncryptCountB = Mod(($i_EncryptCountB + $av_EncryptBox[$i_EncryptCountA][0] + $av_EncryptBox[$i_EncryptCountA][1]), 256)
  139.                     $v_EncryptSwap = $av_EncryptBox[$i_EncryptCountA][0]
  140.                     $av_EncryptBox[$i_EncryptCountA][0] = $av_EncryptBox[$i_EncryptCountB][0]
  141.                     $av_EncryptBox[$i_EncryptCountB][0] = $v_EncryptSwap
  142.                 Next
  143.                 For $i_EncryptCountA = 1 To StringLen($s_EncryptText) Step 2
  144.                     $i_EncryptCountC = Mod(($i_EncryptCountC + 1), 256)
  145.                     $i_EncryptCountD = Mod(($i_EncryptCountD + $av_EncryptBox[$i_EncryptCountC][0]), 256)
  146.                     $i_EncryptCountE = $av_EncryptBox[Mod(($av_EncryptBox[$i_EncryptCountC][0] + $av_EncryptBox[$i_EncryptCountD][0]), 256) ][0]
  147.                     $v_EncryptCipherBy = BitXOR(Dec(StringMid($s_EncryptText, $i_EncryptCountA, 2)), $i_EncryptCountE)
  148.                     $v_EncryptCipher = $v_EncryptCipher & Chr($v_EncryptCipherBy)
  149.                 Next
  150.                 $s_EncryptText = $v_EncryptCipher
  151.                 $i_EncryptCountG = ''
  152.                 $i_EncryptCountH = ''
  153.                 $v_EncryptModified = ''
  154.                 For $i_EncryptCountG = 1 To StringLen($s_EncryptText)
  155.                     If $i_EncryptCountH = StringLen($s_EncryptPassword) Then
  156.                         $i_EncryptCountH = 1
  157.                     Else
  158.                         $i_EncryptCountH = $i_EncryptCountH + 1
  159.                     EndIf
  160.                     $v_EncryptModified = $v_EncryptModified & Chr(BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountG, 1)), Asc(StringMid($s_EncryptPassword, $i_EncryptCountH, 1)), 255))
  161.                 Next
  162.                 $s_EncryptText = $v_EncryptModified
  163.             Next
  164.         EndIf
  165.         Return $s_EncryptText
  166.     EndIf
  167. EndFunc   ;==>_StringEncrypt
  168.  
  169. ;===============================================================================
  170. ;
  171. ; Function Name:    _StringInsert(), version 1.02
  172. ; Description:        Inserts a string within another
  173. ; Parameters:         $s_String         - Original string
  174. ;                    $s_InsertString    - String to insert
  175. ;                    $i_Position        - Position to insert string (negatives values
  176. ;                                      count from right hand side)
  177. ; Requirement(s):     None
  178. ; Author(s):          Louis Horvath <celeri at videotron dot ca>
  179. ;
  180. ; Return value:     upon success, returns a string containing the desired insert string.
  181. ;                     upon error, sets @error to the following values:
  182. ;                    @error = 1 : Source string empty / not a string
  183. ;                    @error = 2 : Insert string empty / not a string
  184. ;                    @error = 3 : Invalid position
  185. ;
  186. ;                    and returns original string unmodified.
  187. ;===============================================================================
  188. Func _StringInsert($s_String, $s_InsertString, $i_Position)
  189.     Local $i_Length, $s_Start, $s_End
  190.     
  191.     If $s_String = "" Or (Not IsString($s_String)) Then
  192.         SetError(1) ; Source string empty / not a string
  193.         Return $s_String
  194.     ElseIf $s_InsertString = "" Or (Not IsString($s_String)) Then
  195.         SetError(2) ; Insert string empty / not a string
  196.         Return $s_String
  197.     Else
  198.         $i_Length = StringLen($s_String) ; Take a note of the length of the source string
  199.         If (Abs($i_Position) > $i_Length) Or (Not IsInt($i_Position)) Then
  200.             SetError(3) ; Invalid position
  201.             Return $s_String
  202.         EndIf
  203.     EndIf
  204.     
  205.     ; If $i_Position at start of string
  206.     If $i_Position = 0 Then
  207.         Return $s_InsertString & $s_String ; Just add them up :) Easy :)
  208.         ; If $i_Position is positive
  209.     ElseIf $i_Position > 0 Then
  210.         $s_Start = StringLeft($s_String, $i_Position) ; Chop off first part
  211.         $s_End = StringRight($s_String, $i_Length - $i_Position) ; and the second part
  212.         Return $s_Start & $s_InsertString & $s_End ; Assemble all three pieces together
  213.         ; If $i_Position is negative
  214.     ElseIf $i_Position < 0 Then
  215.         $s_Start = StringLeft($s_String, Abs($i_Length + $i_Position)) ; Chop off first part
  216.         $s_End = StringRight($s_String, Abs($i_Position)) ; and the second part
  217.         Return $s_Start & $s_InsertString & $s_End ; Assemble all three pieces together
  218.     EndIf
  219. EndFunc   ;==>_StringInsert
  220.  
  221. ;===============================================================================
  222. ;
  223. ; Description:      Changes a string to proper case, same a =Proper function in Excel
  224. ; Syntax:           _StringProper( $sString)
  225. ; Parameter(s):     $sString      - String to change to proper case.
  226. ; Requirement(s):   None
  227. ; Return Value(s):  On Success - Returns the proper string.
  228. ;                   On Failure - Returns an empty string and sets @error = 1
  229. ; Author(s):        Jos van der Zande <jdeb at autoitscript dot com>
  230. ; Note(s):          None
  231. ;
  232. ;===============================================================================
  233.  
  234. Func _StringProper($s_Str)
  235.     Local $iX = 0
  236.     Local $CapNext = 1
  237.     Local $s_nStr = ""
  238.     Local $s_CurChar
  239.     For $iX = 1 To StringLen($s_Str)
  240.         $s_CurChar = StringMid($s_Str, $iX, 1)
  241.         Select
  242.             Case $CapNext = 1
  243.                 If __CharacterIsApha($s_CurChar) Then
  244.                     $s_CurChar = StringUpper($s_CurChar)
  245.                     $CapNext = 0
  246.                 EndIf
  247.             Case Not __CharacterIsApha($s_CurChar)
  248.                 $CapNext = 1
  249.             Case Else
  250.                 $s_CurChar = StringLower($s_CurChar)
  251.         EndSelect
  252.         $s_nStr = $s_nStr & $s_CurChar
  253.     Next
  254.     Return ($s_nStr)
  255. EndFunc   ;==>_StringProper
  256.  
  257. ;===============================================================================
  258. ;
  259. ; Description:      Repeats a string a specified number of times.
  260. ; Syntax:           _StringRepeat( $sString, $iRepeatCount )
  261. ; Parameter(s):     $sString      - String to repeat
  262. ;                   $iRepeatCount - Number of times to repeat the string
  263. ; Requirement(s):   None
  264. ; Return Value(s):  On Success - Returns string with specified number of repeats
  265. ;                   On Failure - Returns an empty string and sets @error = 1
  266. ; Author(s):        Jeremy Landes <jlandes at landeserve dot com>
  267. ; Note(s):          None
  268. ;
  269. ;===============================================================================
  270. Func _StringRepeat($sString, $iRepeatCount)
  271.     ;==============================================
  272.     ; Local Constant/Variable Declaration Section
  273.     ;==============================================
  274.     Local $sResult
  275.     
  276.     Select
  277.         Case Not StringIsInt($iRepeatCount)
  278.             SetError(1)
  279.             Return ""
  280.         Case StringLen($sString) < 1
  281.             SetError(1)
  282.             Return ""
  283.         Case $iRepeatCount <= 0
  284.             SetError(1)
  285.             Return ""
  286.         Case Else
  287.             For $iCount = 1 To $iRepeatCount
  288.                 $sResult = $sResult & $sString
  289.             Next
  290.             
  291.             Return $sResult
  292.     EndSelect
  293. EndFunc   ;==>_StringRepeat
  294.  
  295. ;===============================================================================
  296. ;
  297. ; Description:      Reverses the contents of the specified string.
  298. ; Syntax:           _StringReverse( $sString )
  299. ; Parameter(s):     $sString - String to reverse
  300. ; Requirement(s):   None
  301. ; Return Value(s):  On Success - Returns reversed string
  302. ;                   On Failure - Returns an empty string and sets @error = 1
  303. ; Author(s):        Jonathan Bennett <jon at hiddensoft com>
  304. ; Note(s):          None
  305. ;
  306. ;===============================================================================
  307. Func _StringReverse($sString)
  308.     ;==============================================
  309.     ; Local Constant/Variable Declaration Section
  310.     ;==============================================
  311.     Local $sReverse
  312.     Local $iCount
  313.     
  314.     If StringLen($sString) >= 1 Then
  315.         For $iCount = 1 To StringLen($sString)
  316.             $sReverse = StringMid($sString, $iCount, 1) & $sReverse
  317.         Next
  318.         
  319.         Return $sReverse
  320.     Else
  321.         SetError(1)
  322.         Return ""
  323.     EndIf
  324. EndFunc   ;==>_StringReverse
  325.  
  326. ;===============================================================================
  327. ;
  328. ; Function Name:    _StringToHex("string")
  329. ; Description:      Convert a string of characters to hexadecimal.
  330. ; Parameter(s):     $strChar is the string you want to convert.
  331. ; Requirement(s):   String Input.
  332. ; Return Value(s):  Returns the converted string in hexadecimal.
  333. ; Author(s):        Jarvis Stubblefield
  334. ; Corrected:        2005/09/04 jpm error checking
  335. ;
  336. ;===============================================================================
  337.  
  338. Func _StringToHex($strChar)
  339.     Local $aryChar, $i, $iDec, $hChar, $strHex
  340.     
  341.     $aryChar = StringSplit($strChar, "")
  342.     
  343.     For $i = 1 To $aryChar[0]
  344.         $iDec = Asc($aryChar[$i])
  345.         $hChar = Hex($iDec, 2)
  346.         $strHex = $strHex & $hChar
  347.     Next
  348.     
  349.     Return $strHex
  350.     
  351. EndFunc   ;==>_StringToHex
  352.  
  353. ;=================================================================================
  354. ; Helper functions
  355. Func __CharacterIsApha($s_Str)
  356.     Local $a_Alpha = "abcdefghijklmnopqrstuvwxyz"
  357.     Return (StringInStr($a_Alpha, $s_Str))
  358. EndFunc   ;==>__CharacterIsApha
  359.